"use strict";
/*
 * @Author: Fan Dong
 * @Date: 2021-06-22 10:19:39
 * @LastEditors: Fan Dong
 * @LastEditTime: 2021-06-24 09:57:35
 * @Description: 文件描述
 * @FilePath: \learn-typescript\ts\1.数据类型.ts
 */
// ts的数据类型
/*
  布尔类型（boolean）
  字符串类型（string）
  数字类型（number）
  数组类型（array）
  元组类型（tuple）
  枚举类型（enum）
  任意类型（any）
  null 和 undefined
  void类型
  never类型
*/
// 布尔类型（boolean） true  false
// let flag: boolean = true;
// 数字类型（number）
var a = 123;
a = 12.3;
// a="2ew" // 错误写法
// 字符串类型（string）
var str = "哈哈哈";
// 错误写法
// str= 12;
// str= false
// 数组类型（array） ts 中2中方式
// 1.第一种方式
var arr = [1, 2, 3, 4];
var arr4 = [1, 2, "ff", 4, false];
console.log(arr, "arr");
// 2.第二种定义数组的方式
var arr2 = [11, 22, 33];
var arr3 = ["kakka", "kjakjk"];
console.log(arr2, "arr2");
console.log(arr3, "arr3");
// 元组类型（tuple） 属于数组的一种
var tuple = ["jj", 1234, false];
console.log(tuple, "tuple");
// 枚举类型（enum）
var Flag;
(function (Flag) {
    Flag[Flag["success"] = 1] = "success";
    Flag[Flag["error"] = -1] = "error";
})(Flag || (Flag = {}));
var f = Flag.error;
console.log(f);
console.log(Flag.success);
var Color;
(function (Color) {
    Color[Color["red"] = 0] = "red";
    Color[Color["blue"] = 1] = "blue";
    Color[Color["orange"] = 2] = "orange";
})(Color || (Color = {}));
// 如果没赋值，就默认是索引值
var r = Color.red;
var b = Color.blue;
console.log(r, b);
// 如果没赋值，且上一个有值，默认值为上一个的值+1
var Color2;
(function (Color2) {
    Color2[Color2["red"] = 0] = "red";
    Color2[Color2["blue"] = 5] = "blue";
    Color2[Color2["orange"] = 6] = "orange";
})(Color2 || (Color2 = {}));
var r2 = Color2.red;
var b2 = Color2.blue;
var o2 = Color2.orange;
console.log(r2, b2, o2);
// 任意类型（any）
var num = 123;
num = "str";
num = false;
console.log(num);
// 任意类型的用处
// let oBox: any = document.getElementById("box");
// oBox.style.color = "red";
//   null 和 undefined其他（never类型）
// let  num11: number;
// console.log(num11)  // 输出 undefined  报错
var num2;
console.log(num2); //  输入undefined  // 正确
// 定义未赋值undefined
var num3;
console.log(num3);
// null
var num4;
num4 = null;
console.log(num4, 122);
// 一个元素可能是number类型 可能是null 可能是undefined
var num5;
num5 = 1234;
console.log(num5);
// void类型 表示没有任何类型，一般踊跃定义方法没有返回值
// es5定义方法
// 错误写法
// function run(): undefined{
//   console.log('run')
// }
// run()
//  正确写法
function run() {
    console.log("run");
}
run();
//  正确写法
function run2() {
    return 999;
}
run2();
// never类型：是其他类型（包括null和undefined） 的子类型，代表不会出现的值
// 这意味着声明never的变量只能被never类型所赋值
var a9;
a9 = undefined;
var b1;
b1 = null;
var v1;
v1 = (function () {
    throw new Error("错误啦");
})();
console.log(v1);
